在 Android 11 及更高版本系统中处理可空性
作者 / David Winer, Kotlin 产品经理
浅谈 Kotlin 中的可空性
KOTLIN
var x: Int = 1
x = null // compilation error
var y: Int? = 1
y = null // okay
Kotlin 的这个特性能够让您的代码更安全。即使您随后调用一个方法或试图访问 x 等非空变量属性,也不会面临空指针异常的风险。许多开发者向我们反馈表示,自从有了该特性后,他们便可以把更多精力放在代码设计上并为用户打造质量更高的应用。
问号操作符 https://kotlinlang.org/docs/reference/null-safety.html
可空性对 Java 编程语言有什么作用?
如果我使用的 (Android) API 不是用 Kotlin 编写的,该怎么办?不用担心,Kotlin 编译器能够识别 Java 代码的注释,从而判定方法返回的结果是否为可空值,例如:
JAVA
public @Nullable String getCurrentName() {
return currentName;
}
添加 @Nullable 注释后,当您在 Kotlin 文件中使用 getCurrentName 的结果时,您必须先进行 null 值检查,才能对其解析引用,否则会触发 Android Studio 报错,而且 Kotlin 编译器也会在构建时抛出错误。@NonNull 注释则恰好与之相反,如果一个方法标有 @NonNull 注释,Kotlin 编译器会将该方法返回的结果视为非空类型,并禁止您在之后的代码中把该结果设置为 null。
此外,Kotlin 编译器还可以识别另外两个类似的注释: @RecentlyNullable 和 @RecentlyNonNull。这两个注释与 @Nullable 和 @NonNull 完全相同,唯一的区别在于它们会生成警告而非错误*。
Android 11 中的可空性
我们在近期发布了 Android 11 开发者预览版,邀请开发者们试用最新的 Android 11 SDK。我们升级了 SDK 中的部分注释,将 @RecentlyNullable 和 @RecentlyNonNull 分别更改为 @Nullable 和 @NonNull (可空性违规行为从触发警告变为导致错误)。此外,我们也继续为 SDK 中不包含可空性信息的方法增加 @RecentlyNullable 和 @RecentlyNonNull 注释。
下一步
空值检查
https://kotlinlang.org/docs/reference/basic-syntax.html#using-nullable-values-and-checking-for-null
* Java 是 Oracle 和/或其附属公司的注册商标。
推荐阅读